import os
import json
from typing import Union, List

def load_files(file_path: Union[List[str], str],root_path="examples_data"):
    # 如果是字符串类型，将其转为只有一个元素的列表，方便统一处理
    if isinstance(file_path, str):
        file_path = [file_path]
    
    # 存储结果的列表
    results = []
    for index in range(len(file_path)):
        file_path[index] = os.path.join(root_path,file_path[index])
    # 遍历文件路径列表
    for path in file_path:
        if not os.path.isfile(path):
            # 如果路径不是有效文件，继续处理下一个文件
            print(f"文件未找到: {path}")
            continue
        
        try:
            # 根据文件扩展名决定加载方式
            if path.lower().endswith('.json'):
                # 处理 JSON 文件
                with open(path, 'r', encoding='utf-8') as f:
                    content = json.load(f)  # 解析 JSON 数据
                    results.append(content) 
            elif path.lower().endswith('.txt'):
                # 处理纯文本文件
                with open(path, 'r', encoding='utf-8') as f:
                    content = f.read()  # 读取纯文本数据
                    results.append(content)  
            else:
                print(f"不支持的文件格式: {path}")  # 文件格式不在支持范围内
        except json.JSONDecodeError:
            print(f"JSON 解析失败: {path}")
        except Exception as e:
            print(f"读取文件 {path} 时出错: {e}")
    
    return results

def save_datas(data: Union[dict, list, str], file_path: str, root_path="examples_data"):
    """
    保存数据到指定路径，根据传入的后缀（若有），或根据变量类型自动推断后缀（支持 JSON 和 TXT）。
    :param data: 要保存的数据，可以是字典（dict）、列表（list）或字符串（str）。
    :param file_path: 保存数据的相对文件路径，可以带后缀（如 .json 或 .txt）。
    :param root_path: 保存数据的根目录（默认为 "examples_data"）。
    """
    try:
        # 确保输出目录存在
        os.makedirs(root_path, exist_ok=True)

        # 检查文件名是否有后缀
        if not os.path.splitext(file_path)[1]:
            # 如果文件名没有后缀，根据数据类型决定后缀
            if isinstance(data, (list, dict)):
                file_path += ".json"  # 给 JSON 数据添加 .json 后缀
            elif isinstance(data, str):
                file_path += ".txt"  # 给文本数据添加 .txt 后缀
            else:
                raise ValueError(f"不支持的数据类型: {type(data).__name__}")
        
        # 拼接完整路径
        full_path = os.path.join(root_path, file_path)

        # 保存为 JSON 格式
        if isinstance(data, (list, dict)):
            with open(full_path, 'w', encoding='utf-8') as f:
                json.dump(data, f, ensure_ascii=False, indent=4)
            print(f"数据已成功保存为 JSON 文件: {full_path}")

        # 保存为文本文件
        elif isinstance(data, str):
            with open(full_path, 'w', encoding='utf-8') as f:
                f.write(data)
            print(f"数据已成功保存为文本文件: {full_path}")

        # 如果数据类型不被支持，抛出异常
        else:
            raise ValueError(f"不支持的数据类型: {type(data).__name__}")
    
    except FileNotFoundError as fnfe:
        print(f"文件路径错误：无法保存到 {file_path}。错误详情：{fnfe}")
    except json.JSONDecodeError as jde:
        print(f"JSON 数据解析错误：{jde}")
    except ValueError as ve:
        print(f"数据类型错误：{ve}")
    except PermissionError as pe:
        print(f"权限错误，无法写入文件：{file_path}。错误详情：{pe}")
    except Exception as e:
        print(f"保存数据时发生未知错误：{e}")

if __name__ == "__main__":
    # 示例用法
    # file_path = ["detail_outline.json","origin_paper_search_result.json"]
    # detail_outline,origin_paper_search_result = load_files(file_path)
    # # print(results)
    # print(detail_outline)
    # print(origin_paper_search_result)
    a = {'a':1}
    save_datas(a,"test.json")
